/*
* 项目的功能入口
*/

import {join} from 'path';
import express from 'express';
const app = express();
import hbs from 'hbs';


/*配置视图引擎*/
app.set('views', join(__dirname, 'views'));
app.set('view engine', 'hbs');

/*
* Exposing locals as template data
* 暴露本地作为模板数据
* 访问本地数据使用@ property语法:

* ==========================================
* 模版引擎执行流程
* //  1. 找到你需要渲染的页面
  //  2. 将这个页面渲染出来 -> 11212
  //  3. 判断views目录下有没有一个叫做layout.hbs文件
  //  4. 再次渲染layout文件，并将刚刚具体页面渲染的结果替换到{{{body}}}
* */




//注册helpre可以用于在模板中的标识
hbs.localsAsTemplateData(app);
// 默认模板布局页
app.locals.layout='shared/layout';



/*
* ====================
*     模版中挖坑
* ===================
*/
const blocks = {};
hbs.registerHelper('block', (key, context) => {
    const block = blocks[key] = blocks[key] || []
    if (context.fn) {
        // 此时是开闭标签
        block.push(context.fn(this))
    } else {
        // 单标签
        delete blocks[key]
        // XSS
        return new hbs.handlebars.SafeString(block.join('\n'))
    }
});




/*
* =====================
* body-parser 解析请求体
 *=====================
*/
import bodyParser from  'body-parser';
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());






/*
* ==================
*   配置网站静态文件
* ==================
*/
app.use(express.static(join(__dirname,'../www/')));




/*载入路由表*/
import router from './router';
app.use(router);



/*监听服务*/
app.listen('3000',(error)=>{
    if(error) throw error;
    console.log('app is  ready @http://localhost:3000');
});